Skip to main content

Utilizzo di MC_DigitalCamSwitch_HighPrecision

L'esempio BasicMotion_DigitalCamSwitch_HighPrecision.project si trova nella directory di installazione CODESYS sotto ..\CODESYS SoftMotion\Examples.

Questo esempio mostra come utilizzare gli output di SMC_DigitalCamSwitch_HighPrecision per controllare le uscite digitali con alta risoluzione temporale. I terminali EL2258 ed EL2252 di Beckhoff sono usati

Avviso

Le descrizioni dei dispositivi di Beckhoff non sono incluse nell'esempio. È possibile scaricarli direttamente dal fornitore e installarli nel repository dei dispositivi. Per eseguire l'esempio, sono necessari un accoppiatore bus EK1100, un terminale EL2258 e un terminale EL2252

Importante

Questo esempio è stato sviluppato e testato secondo la revisione 0017 di EL2258 e la revisione 0020 di EL2252. Serve solo come esempio. Non garantiamo la correttezza. Il codice sorgente deve essere testato prima dell'uso. Se necessario, deve essere modificato con altre revisioni dei terminali

Struttura dell'applicazione

L'applicazione è composta da Main programma, DigitalCamSwitch_EL2258 e DigitalCamSwitch_EL2252 blocchi funzionali e un accoppiatore bus EK1100 con terminali di uscita EL2258 ed EL2252.

Le DigitalCamSwitch_EL2258 e DigitalCamSwitch_EL2252 blocchi funzionali sono le parti essenziali dell'esempio. Mostrano come usare il Events uscita di SMC_DigitalCamSwitch_HighPrecision per programmare uscite digitali. I blocchi funzionali devono essere intesi come esempi che possono essere adattati ad altro hardware

DigitalCamSwitch_EL2258

. Il blocco funzionale funziona come segue:
  1. Il blocco funzione viene inizializzato su un bordo ascendente in corrispondenza del Enable input. STATE_INIT_0 e STATE_INIT_1 afferma, il OutputBufferReset i segnali del terminale EL2258 vengono scritti e aLastEventIds l'array è inizializzato. L'ID dell'ultimo evento elaborato per ogni traccia viene salvato in questo array. Ciò impedisce che un evento venga trasferito più volte al terminale.

  2. Una volta inizializzato (STATE_ACTIVE), tutte le tracce vengono elaborate a turno e per ciascuna traccia viene eseguita la seguente logica:

    1. Verificate se il terminale EL2258 ha già accettato gli ultimi eventi comandati (ChannelsIn[channel].OutputOrderFeedback = ChannelsOut[channel].OutputOrderCounter).

    2. Ripeti tutti gli eventi della traccia. Solo quegli eventi di cui ToggleEventId è maggiore dell'ultimo ID elaborato viene considerato ulteriormente. (Interrogazione EventId_GreaterThan(event^.ToggleEventId, aLastEventIds[channel]))

      Vedi sezione: «Nota sull'ordine degli eventi».

    3. Convertire il Duration dell'evento in un timestamp EtherCAT e corrispondente scrittura del ChannelsOut[channel].OutputEventState e ChannelsOut[channel].OutputEventTime uscite.

    4. Interrompe l'elaborazione dopo un massimo di 5 eventi.

    5. Notifica al terminale che esistono nuovi eventi se è stato trovato almeno un evento (ChannelsOut[channel].OutputOrderCounter := ChannelsOut[channel].OutputOrderCounter + 1).

Nota sull'ordine dell'evento

Gli eventi vengono restituiti dal SMC_DigitalCamSwitch_HighPrecision blocco funzionale per ogni traccia in un array. SwitchNumber e un ToggleEventId vengono restituiti per ogni evento. ToggleEventId è unico e crescente per ogni traccia.

Per ulteriori informazioni, vedere: SMC_CAMSWITCH_TOGGLE_EVENT.

Nell'esempio, aLastEventIds[trackNo] l'array memorizza per ogni traccia che ToggleEventId è stato trasferito l'ultima volta al terminale in una precedente chiamata al blocco funzione. Perché il ToggleEventIds sono in ordine crescente, la chiamata successiva saprà esattamente quali eventi devono ancora essere trasferiti.

. Due dettagli devono ancora essere considerati:
  1. Perché non è noto in quale ToggleEventId gli eventi iniziano, a valid il flag viene salvato in EventId tipo di dati oltre all'ID. EventId_GreaterThan confronto, questo valid la bandiera viene presa in considerazione di conseguenza.

  2. Le ToggleEventIds hanno il tipo di dati a 32 bit UDINT e può quindi, in linea di principio, traboccare con una durata rispettivamente lunga o un'elevata frequenza di commutazione. Il valore passa quindi da 2^32-1 a 0. La funzione di confronto EventId_GreaterThan tiene conto anche degli overflow a 32 bit.

Mappatura PDO EL2258

Le ChannelsOut e ChannelsIn uscite di DigitalCamSwitch_EL2258 i blocchi funzione sono collegati ai rispettivi canali I/O del terminale EL2258. L'immagine seguente mostra le mappature per il canale 1. Il canale 2 è simile; solo ChannelsOut e ChannelsIn l'indice è 2, non 1.

_sm_img_mapping_el2258.png

DigitalCamSwitch_EL2252

Il principio di base è identico a DigitalCamSwitch_EL2258. La differenza sta nel modo in cui i segnali vengono scritti perché il terminale EL2252 può programmare un solo evento attivo

  1. Innanzitutto, il blocco funzione viene inizializzato in STATE_INIT.

  2. Poi STATE_CHECK_FOR_EVENT controlla se gli eventi di SMC_DigitalCamSwitch_HighPrecision i blocchi funzionali sono in sospeso.

  3. Se un evento è disponibile, deve essere programmato entro due cicli:

    • Le uscite e il timestamp EtherCAT vengono scritti nel primo ciclo. Le Activate l'uscita è impostata su 0.

    • Nel secondo ciclo, il Activate l'uscita è impostata su 3 pollici STATE_ACTIVATE_EVENT_IN_EL2252. Questo attiva l'evento nel terminale

  4. Nel STATE_WAIT_UNTIL_THE_INPUTS_MATCH_THE_OUTPUTSil sistema attende quindi che l'evento sia stato eseguito. I segnali provenienti da Feedback a tale scopo vengono utilizzati gli input del terminale.

Mappatura PDO EL2252

_sm_img_mapping_el2252.png

Main

Nel programma principale, sono configurati quattro interruttori (due su ogni traccia). Le tracce hanno anche diverse compensazioni on/off (OnComp, OffComp):

_sm_img_digitalcamswitch_highprecision.png

Il programma include le chiamate ai blocchi funzionali necessarie per attivare una previsione per l'asse e spostarlo costantemente a 180°/s (*), nonché per SMC_DigitalCamSwitch_HighPrecision, DigitalCamSwitch_EL2258e DigitalCamSwitch_EL2252. Prima di iniziare il movimento, il bus di campo deve essere completamente acceso. Altrimenti gli eventi non possono essere trasmessi al terminale

(*) È stato scelto un movimento costante per mantenere l'esempio semplice e chiaro. Tuttavia, SMC_DigitalCamSwitch_HighPrecision il blocco funzionale funziona con tutti i tipi di movimenti. Ad esempio, fornisce anche timestamp esatti durante una fase di accelerazione o

Messa in servizio

  1. Crea l'applicazione e scaricala su un controller.

  2. Avviare l'applicazione.